home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / huffman / huffman.bas next >
BASIC Source File  |  1994-11-16  |  2KB  |  76 lines

  1. 10 '------------------ハフマン記号生成プログラム J.HON------------------
  2. 11 '
  3. 20 SCREEN@0:COLOR 7,0,0:CLS
  4. 30 DIM 管理(100),P(100),確率(100),符号$(100)
  5. 40 '
  6. 50 *START
  7. 60 FOR I=0 TO 100:管理(I)=0:P(I)=0:確率(I)=0:符号$(I)="":NEXT
  8. 70 '
  9. 80 'データ作成
  10. 90 COLOR 2
  11. 100 PRINT"入力が完了したはずなのにノコリが例えば'1.226E-8'のようになった"
  12. 110 PRINT"時は,無視して[CR]を押して下さい  ['EXIT'で終了です]"
  13. 120 COLOR 7
  14. 130 PRINT"小数第6位まで有効です"
  15. 140 M=0:L=0:P=1!
  16. 150 LOCATE 0,3:PRINT "確率ノコリ";P;"  通報 u=";M+1;"番目       "
  17. 160 LOCATE 0,4:PRINT STRING$(79," ")
  18. 170 LOCATE 0,4:INPUT "確率を入力してください([CR]で省略)";A$
  19. 175 IF A$="exit" OR A$="EXIT" THEN END
  20. 180 PP=VAL(A$):IF P<PP THEN BEEP:GOTO 150
  21. 190 P=P-PP
  22. 200 IF A$="" AND P>0 THEN PP=INT(P*1000000+.5!)/1000000:P=0
  23. 210 P(M)=PP:LOCATE 0,M+5:PRINT "P(u";M+1;")=";PP
  24. 220 M=M+1:IF P>0 THEN 150 'ELSE M=M-1
  25. 230 IF PP=0 THEN M=M-1
  26. 240 GOSUB *MAKE2
  27. 250 LEV=1:MIN2=0
  28. 260 '-------------------------符号作成-----------------------------------
  29. 270 GOSUB *MIN2
  30. 280 WHILE MIN1>0
  31. 290 確率(MIN1)=確率(MIN1)+確率(MIN2):'PRINT 確率(MIN1)
  32. 300 '符号
  33. 310 FOR II=1 TO M
  34. 320   IF 管理(II)=MIN1 THEN 符号$(II)="0"+符号$(II)
  35. 330   IF 管理(II)=MIN2 THEN 符号$(II)="1"+符号$(II)
  36. 340 NEXT
  37. 350 '委託
  38. 360 FOR II=1 TO M
  39. 370   IF 管理(II)=MIN2 THEN 管理(II)=MIN1:'委託
  40. 380 NEXT
  41. 390 GOSUB *MIN2 
  42. 400 WEND
  43. 410 PRINT 
  44. 420 '
  45. 430 '
  46. 440 '
  47. 450 L=0:H=0:GOSUB *MAKE2
  48. 460 FOR I=1 TO M
  49. 470   PRINT USING "U##  &              &   Length=## P(U##)=#.######";I;符号$(I);LEN(符号$(I));I;確率(I)
  50. 480   L=L+LEN(符号$(I))*確率(I)
  51. 490 NEXT
  52. 500 PRINT "平均符号長L=";L
  53. 510 PRINT :PRINT "何かキーを押してください":X$=INPUT$(1)
  54. 520 '
  55. 530 CLS:GOTO *START
  56. 540 *MAKE2:FOR I=1 TO M:確率(I)=P(I-1):管理(I)=I:NEXT:RETURN
  57. 550 RETURN
  58. 560 '--------------------------------------------------------------------
  59. 570 *MIN2
  60. 580 MIN1=0:MIN2=0:MINIMUM=1
  61. 590 '最小
  62. 600 FOR II=1 TO M
  63. 610   IF 管理(II)=II AND MINIMUM>=確率(II) THEN MIN1=II:MINIMUM=確率(II)
  64. 620 NEXT
  65. 630 MINIMUM=1
  66. 640 '最小2
  67. 650 FOR II=1 TO M
  68. 660   IF 管理(II)=II AND MINIMUM>=確率(II) AND II<>MIN1 THEN MIN2=II:MINIMUM=確率(II)
  69. 670 NEXT
  70. 680 'IF MIN1>=MIN2 THEN SWAP MIN1,MIN2
  71. 690 IF MIN2=0 THEN SWAP MIN1,MIN2
  72. 700 RETURN
  73. 710 '
  74. 720 '
  75. 730 DATA 0.35,0.2,0.15,0.15,0.1,
  76.